﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Googler.BLL
{
    public static class ExtensionMethods
    {
        public static string ToHumman(this DateTime dt)
        {
            if (dt == DateTime.MinValue)
                return "Not yet";
            var ts = new TimeSpan(DateTime.Now.Ticks - dt.Ticks);
            
            return ToHumman(ts);
           
        }
        public static string ToHumman(this TimeSpan ts)
        {
            double delta = ts.TotalSeconds;

            const int SECOND = 1;
            const int MINUTE = 60 * SECOND;
            const int HOUR = 60 * MINUTE;
            const int DAY = 24 * HOUR;
            const int MONTH = 30 * DAY;

            if (delta < 0 )
            {
                return "not yet";
            }
            if (delta < 1 * MINUTE)
            {
                return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago";
            }
            if (delta < 2 * MINUTE)
            {
                return "a minute ago";
            }
            if (delta < 45 * MINUTE)
            {
                return ts.Minutes + " minutes ago";
            }
            if (delta < 61 * MINUTE)
            {
                return "an hour ago";
            }
            if (delta < 24 * HOUR)
            {
                return ts.Hours + " hours ago";
            }
            if (delta < 48 * HOUR)
            {
                return "yesterday";
            }
            if (delta < 30 * DAY)
            {
                return ts.Days + " days ago";
            }
            if (delta < 12 * MONTH)
            {
                int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
                return months <= 1 ? "one month ago" : months + " months ago";
            }
            else
            {
                int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
                return years <= 1 ? "one year ago" : years + " years ago";
            }
        }
        public static string ToArabicHumman(this TimeSpan ts)
        {
            double delta = ts.TotalSeconds;

            const int SECOND = 1;
            const int MINUTE = 60 * SECOND;
            const int HOUR = 60 * MINUTE;
            const int DAY = 24 * HOUR;
            const int MONTH = 30 * DAY;

            if (delta < 0)
            {
                return "غير معلوم";
            }
            else if (delta < 1 * MINUTE)
            {
                return ts.Seconds == 1 ? "ثانية" : ts.Seconds + " ثانية";
            }
            else if (delta < 2 * MINUTE)
            {
                return "دقيقة";
            }
            else if (delta < 12 * MINUTE)
            {
                return ts.Minutes + " دقيقة";
            }
            else if (delta < 45 * MINUTE)
            {
                return ts.Minutes + " دقائق";
            }
            else if (delta < 90 * MINUTE)
            {
                return "ساعة";
            }
            if (delta <= 3 * HOUR)
            {
                return " ساعتان";
            }
            else if (delta < 11 * HOUR)
            {
                return ts.Hours + " ساعات";
            }            
            else if (delta < 24 * HOUR)
            {
                return ts.Hours + " ساعة";
            }
            else if (delta < 48 * HOUR)
            {
                return "أمس";
            }
            else if (delta < 30 * DAY)
            {
                return ts.Days + " أيام";
            }
            else if (delta < 12 * MONTH)
            {
                int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
                return months <= 1 ? "شهر" : months + " أشهر";
            }
            else
            {
                int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
                return years <= 1 ? "سنة" : years + " سنوات";
            }
        }
        public static string ToArabicHumman(this DateTime dt)
        {
            if (dt == DateTime.MinValue)
                return "مدة غير معلومة";
            
            var ts = new TimeSpan(DateTime.Now.Ticks - dt.Ticks);
            return ToArabicHumman(ts);
        }
    }
}